﻿using Ldt.DataEngine.DataFlowParse.Model;
using LdtDataEngin.ModuleDetail.AnalysisModule.SituationPlot;
using LdtDataEngin.ModuleDetail.CommonModule.XmlCodeCommon;
using LdtJudge.DataEngine.DataBaseStores;
using LdtJudge.DataEngine.Model.Collection;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;

namespace LdtDataEngin.Moudle
{
    public class MoudleAffordIllegalData : MoudleBase
    {

        private IMoudle _moudle;
        private static string _moudleResult;
        /// <summary>
        /// 违法行为和违法情形模块
        /// </summary>
        /// <param name="moudle">下一个模块</param>
        public MoudleAffordIllegalData(IMoudle moudle)
        {
            _moudle = moudle;
        }

        public override void MoudleHandle(DataContext dataContext)
        {
            //执行当前模块的相关业务逻辑；
            string moudleName = typeof(MoudleAffordIllegalData).FullName;
            moudleName += "_" + this.GetHashCode();
            // 设置模块进度
            dataContext.InteractiveShow.ModuleProcessShow?.Invoke(moudleName, 0, dataContext.InteractiveShow.inputParameterModel);
            // 创建计时器
            Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start();
            try
            {
                // 模块配置
                ConfigModel moudleConfig = dataContext.DataLayerSys.GetConfigModel(moudleName);
                //违法行为和违法情形模块配置
                ConfigModel affordIllegalConfigModel = moudleConfig.ConfigDetail.FirstOrDefault(x => x.Code.ToLower() == "affordillegal");
                ConfigModel wfxwmatchconfig= moudleConfig.ConfigDetail.FirstOrDefault(x => x.Code.ToLower() == "wfxwmatchlearn");
                string AffordIllegalConfig = affordIllegalConfigModel.ConfigContent;
                XmlCodeStartModel xmlCodeStartModel = new XmlCodeStartModel() { dataContext = dataContext };
                var configModel = dataContext.DataLayerSys.GetConfigModel(moudleName);
                if (xmlCodeStartModel.Extract(configModel))
                {
                    string wfxwmach = "";
                    if (wfxwmatchconfig!=null && !string.IsNullOrEmpty(wfxwmatchconfig.ConfigContent))
                    {
                        wfxwmach = wfxwmatchconfig.ConfigContent;
                    }
                    AffordIllegalData affordIllegalData = new AffordIllegalData(dataContext, AffordIllegalConfig,wfxwmach);
                    affordIllegalData.MatchAffordIllegal(dataContext.DataLayerAns.AnalysisResultsDataModel.dataModelList, "", "3");
                    affordIllegalData.MatchAffordIllegal(dataContext.DataLayerAns.AnalysisResultsDataModel.dataModelList, "", "4");
                    _moudleResult = dataContext.DataLayerAns.AnalysisResultsXml.OuterXml;
                }

            }
            catch (Exception ex)
            {
                dataContext.InteractiveShow.LogShow("违法行为和违法情形错误：" + ex.ToString(), LogMessageType.Error);
            }
            dataContext.InteractiveShow.LogShow("***************************" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "--->违法行为和违法情形模块执行完成*****************************");
            // 设置模块进度
            stopwatch.Stop();

            dataContext.InteractiveShow.ModuleProcessShow?.Invoke(moudleName + "_" + stopwatch.Elapsed.TotalMilliseconds.ToString("0"), 100, dataContext.InteractiveShow.inputParameterModel);
            //执行完毕调用下一个模块；
            _moudle.MoudleHandle(dataContext);
        }

        /// <summary>
        /// 模块处理结果
        /// </summary>
        /// <returns></returns>
        public static HandleResultModel MoudleHandleResult()
        {
            HandleResultModel resultModel = new HandleResultModel();
            if (!string.IsNullOrWhiteSpace(_moudleResult))
            {

                resultModel.ResultType = "1";
                resultModel.ResultData = _moudleResult;
            }
            return resultModel;
        }
    }
}
